{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Amazon玩具市场分析"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一、数据来源及字段解释"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据来源于kaggle:[Toy Products on Amazon](https://www.kaggle.com/PromptCloudHQ/toy-products-on-amazon)         \n",
    "\n",
    "字段含义如下：\n",
    "\n",
    "|   字段名       | 含义     |内容示例  |\n",
    "| ------------- |:-------------:| -----:|\n",
    "| uniq_id    | 交易ID | eac7efa5dbd3d667f26eb3d3ab504464|\n",
    "| product_name     | 产品名称     |   Hornby 2014 Catalogue |\n",
    "| manufacturer | 生产商      |    Hornby |\n",
    "| price    | 价格|£3.42|\n",
    "| number_available_in_stock     | 库存数量     |   5 new |\n",
    "| number_of_reviews | 评论数    |   15 |\n",
    "| number_of_answered_questions    | 提问数量 | 1|\n",
    "| average_review_rating    | 平均评分    |   4.9 out of 5 stars |\n",
    "| amazon_category_and_sub_category | 类别和子类      |  Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains |\n",
    "| customers_who_bought_this_item_also_bough  | 商品集 |http://www.amazon.co.uk/Hornby-R8150-Catalogue-2015/dp/B00S9SUUBE|\n",
    "| description    | 商品描述   |   Product Description Hornby 2014 Catalogue Box Contains 1 x one catalogue |\n",
    "| product_information | 产品信息   |   Technical Details Item Weight640 g Product Dimensions29.6 x 20.8 x 1 cm |\n",
    "| items_customers_buy_after_viewing_this_item | 浏览后购买商品集    |  http://www.amazon.co.uk/Hornby-R8150-Catalogue-2015/dp/B00S9SUUBE  |\n",
    "| customer_questions_and_answers    | 问题和回答 | Does this catalogue detail all the previous Hornby products please?|\n",
    "| customer_reviews   | 顾客评价   |   Worth Buying For The Pictures Alone |\n",
    "| sellers | 卖家     | {\"seller\"=>{\"Seller_name_1\"=>\"UHD WHOLESALE\", \"Seller_price_1\"=>\"£16.99\"}} |\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "二、数据格式转换和清洗"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Index: 10000 entries, eac7efa5dbd3d667f26eb3d3ab504464 to 94d18e86e504bee1e392df7e5738b18a\n",
      "Data columns (total 16 columns):\n",
      "product_name                                   10000 non-null object\n",
      "manufacturer                                   9993 non-null object\n",
      "price                                          8565 non-null object\n",
      "number_available_in_stock                      7500 non-null object\n",
      "number_of_reviews                              9982 non-null object\n",
      "number_of_answered_questions                   9235 non-null float64\n",
      "average_review_rating                          9982 non-null object\n",
      "amazon_category_and_sub_category               9310 non-null object\n",
      "customers_who_bought_this_item_also_bought     8938 non-null object\n",
      "description                                    9349 non-null object\n",
      "product_information                            9942 non-null object\n",
      "product_description                            9349 non-null object\n",
      "items_customers_buy_after_viewing_this_item    6935 non-null object\n",
      "customer_questions_and_answers                 914 non-null object\n",
      "customer_reviews                               9979 non-null object\n",
      "sellers                                        6918 non-null object\n",
      "dtypes: float64(1), object(15)\n",
      "memory usage: 1.3+ MB\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import re\n",
    "from efficient_apriori import apriori\n",
    "data=pd.read_csv(r'./amazon_co-ecommerce_sample.csv',index_col='uniq_id')\n",
    "print(data.info())\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上面我们能看到数据一共有1万条，除product_name字段外都有空值存在。并且一些数值字段的格式是object，而非float，我们要进行相应格式清洗和转换。针对一些字段的空值我们无需做处理，比如库存数量，有些则可以取对应玩具子类的平均值，还有一些则进行删除空值如所属类目和子类。还有一些字段我们需要进行分列比如所属类目和子类，我们更加关注的是这一商品属于哪个具体类别而非它的父类。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Index: 10000 entries, eac7efa5dbd3d667f26eb3d3ab504464 to 94d18e86e504bee1e392df7e5738b18a\n",
      "Data columns (total 18 columns):\n",
      "product_name                                   10000 non-null object\n",
      "manufacturer                                   9993 non-null object\n",
      "price                                          8565 non-null float64\n",
      "number_available_in_stock                      7500 non-null float64\n",
      "number_of_reviews                              9982 non-null float64\n",
      "number_of_answered_questions                   9235 non-null float64\n",
      "average_review_rating                          9982 non-null float64\n",
      "amazon_category_and_sub_category               9310 non-null object\n",
      "customers_who_bought_this_item_also_bought     8938 non-null object\n",
      "description                                    9349 non-null object\n",
      "product_information                            9942 non-null object\n",
      "product_description                            9349 non-null object\n",
      "items_customers_buy_after_viewing_this_item    6935 non-null object\n",
      "customer_questions_and_answers                 914 non-null object\n",
      "customer_reviews                               9979 non-null object\n",
      "sellers                                        6918 non-null object\n",
      "statue_of_product_in_stock                     10000 non-null object\n",
      "smallest_subcategory                           10000 non-null object\n",
      "dtypes: float64(5), object(13)\n",
      "memory usage: 1.4+ MB\n",
      "None\n",
      "             price  number_available_in_stock  number_of_reviews  \\\n",
      "count  8565.000000                7500.000000        9982.000000   \n",
      "mean     20.278002                   7.916933           9.139952   \n",
      "std      46.339949                   8.805777          33.728145   \n",
      "min       0.010000                   1.000000           1.000000   \n",
      "25%       4.990000                   3.000000           1.000000   \n",
      "50%      10.620000                   5.000000           2.000000   \n",
      "75%      19.990000                  10.000000           6.000000   \n",
      "max    2439.000000                  92.000000        1399.000000   \n",
      "\n",
      "       number_of_answered_questions  average_review_rating  \n",
      "count                   9235.000000            9982.000000  \n",
      "mean                       1.834976               4.707283  \n",
      "std                        2.517268               0.372279  \n",
      "min                        1.000000               2.300000  \n",
      "25%                        1.000000               4.500000  \n",
      "50%                        1.000000               5.000000  \n",
      "75%                        2.000000               5.000000  \n",
      "max                       39.000000               5.000000  \n"
     ]
    }
   ],
   "source": [
    "data['price']=data['price'].astype(str).apply(lambda x : re.findall(r\"\\d+.?\\d*|$\",x)[0].replace(',',''))  #将价格的欧元符号去掉，并且去掉数字中的逗号如2，345这样方便将str格式转换为float\n",
    "data['price']=pd.to_numeric(data['price'].apply(lambda x : re.findall(r\"\\d+.?\\d*|$\",x)[0].replace(',','')))\n",
    "data['number_of_reviews']=pd.to_numeric(data['number_of_reviews'].astype(str).apply(lambda x :'' if x=='nan' else x.replace(',','')))\n",
    "data['statue_of_product_in_stock']=data['number_available_in_stock'].astype(str).map(lambda x: x.replace('\\xa0',' ').split(' ')[-1])    #对库存数量字段进行分类，因为库存数量这一字段还包括了库存商品状态\n",
    "data['number_available_in_stock']=data['number_available_in_stock'].astype(str).apply(lambda x:x.split()[0].replace(',','') if x else x)  #分列得到纯数字的库存商品数量\n",
    "data['number_available_in_stock']=pd.to_numeric(data['number_available_in_stock'].apply(lambda x:'' if x=='nan' else x))   \n",
    "data['average_review_rating']=data['average_review_rating'].astype(str).apply(lambda x:x.split()[0].replace(',',''))   #去除字符串“out of 5 stars”留下纯数字\n",
    "data['average_review_rating']=pd.to_numeric(data['average_review_rating'].apply(lambda x:'' if x=='nan' else x))\n",
    "data['smallest_subcategory']=data['amazon_category_and_sub_category'].astype(str).apply(lambda x:   x.split('>')[-1].strip())   #得到最为精准的所属类目\n",
    "print(data.info())\n",
    "print(data.describe())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据格式修改完成后，我们接下来进行数据筛选和空值补充，我们能在上面发现所有数值型数据都没有异常数值，所以我们接下来的主要任务是进行空值补充。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Index: 10000 entries, eac7efa5dbd3d667f26eb3d3ab504464 to 94d18e86e504bee1e392df7e5738b18a\n",
      "Data columns (total 18 columns):\n",
      "product_name                                   10000 non-null object\n",
      "manufacturer                                   10000 non-null object\n",
      "price                                          10000 non-null float64\n",
      "number_available_in_stock                      7500 non-null float64\n",
      "number_of_reviews                              10000 non-null float64\n",
      "number_of_answered_questions                   9235 non-null float64\n",
      "average_review_rating                          10000 non-null float64\n",
      "amazon_category_and_sub_category               9310 non-null object\n",
      "customers_who_bought_this_item_also_bought     8938 non-null object\n",
      "description                                    9349 non-null object\n",
      "product_information                            9942 non-null object\n",
      "product_description                            9349 non-null object\n",
      "items_customers_buy_after_viewing_this_item    6935 non-null object\n",
      "customer_questions_and_answers                 914 non-null object\n",
      "customer_reviews                               9979 non-null object\n",
      "sellers                                        6918 non-null object\n",
      "statue_of_product_in_stock                     10000 non-null object\n",
      "smallest_subcategory                           10000 non-null object\n",
      "dtypes: float64(5), object(13)\n",
      "memory usage: 1.4+ MB\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "data['price']=data['price'].fillna(value=10.62)    #用价格的中位数进行补充\n",
    "data['manufacturer']=data['manufacturer'].fillna(value=data['manufacturer'].value_counts()._stat_axis.values.tolist()[0])  #用生产商中的众数填充空值\n",
    "data['number_of_reviews']=data['number_of_reviews'].fillna(data['number_of_reviews'].mean())\n",
    "data['average_review_rating']=data['average_review_rating'].fillna(data['average_review_rating'].mean())\n",
    "print(data.info())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "至此数据清洗和格式转换就已经全部完成。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 三、数据挖掘及分析\n",
    "## 1.最受欢迎的玩具类型有哪些？\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Vehicles', 'Toys', 'Science Fiction & Fantasy', 'Bead Art & Jewellery-Making', 'Packs & Sets', 'Dice & Dice Games', 'Balloons', 'Banners', 'Card Games', 'Hand Puppets']\n"
     ]
    },
    {
     "data": {
      "image/png": "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FR06dKBBgwbsuuuunHfeeSX97777Lueffz7dunWjcePGfOMb3+CUU05h0aJFZY7zxBNP0K9fP1q2bEmDBg1o164do0aNYtmyZbV9SZIkSZIkSdrM1avrCUiqutNOO43p06dz2WWX0blzZxYuXMirr75a0j9nzhx+//vfc+aZZ7LPPvvw/vvvM2bMGHr37s3LL79M48aNAViyZAndu3fnhz/8IS1atOCVV17hsssu4/XXX+fBBx+sq8uTJEmSJEnSZsgQWtpEPPLII4wfP56//e1v7LHHHhWO2X///Zk7dy716n310e7RowedOnVi8uTJnHLKKQAMHjyYwYMHl4zp27cv9evXZ9iwYSxZsoQdd9yxsBcjSZIkSZKkLYYhtLSJuOOOO+jfv3+lATRA06ZN12jr2LEjDRs25IMPPljr8Zs1awbAF198Ub2JSpIkSZIkSaVYE1raRDz77LN07NiRs88+m+23356GDRty9NFHr1HvubwXX3yR5cuXVxher1q1ihUrVvDCCy9wxRVXcPTRR7PTTjsV6hIkSZIkSZK0BTKEljYR7733HkVFRbzwwguMHz+e3/zmN8yZM4fBgweTUqpwn9WrV3PuuefSoUMHDj744DX6u3btyrbbbkv37t1p2bIld911V6EvQ5IkSZIkSVsYy3FIm4iUEiklpkyZUlI6Y+edd+aAAw7g8ccf58ADD1xjn4svvphnnnmGJ554gm222WaN/smTJ7N06VJeeuklLr/8coYMGcKDDz5IRBT8eiRJkiRJkrRlMISWNhE77LAD7dq1KwmgIbsRYf369Xn11VfXCKFvvvlmrrnmGu677z722WefCo/ZtWtXAHr37k2XLl044IADmDFjBv379y/chUiSJEmSJGmLYjkOaRPRpUuXCttTSmy1VdmP8uTJkxkxYgRXX301xx57bJWO36NHDwDeeuut6k1UkiRJkiRJKsUQWtpEHH744bz44ot89NFHJW1PPvkkK1eupFu3biVtM2fO5IQTTuDss8/mJz/5SZWPP2vWLADatm1bc5OWJEmSJEnSFs9yHNImYtiwYYwbN44jjjiCSy65hH//+99ceOGFHHTQQey///4AvPbaaxx11FF07tyZY489lr/85S8l+7do0YL27dsDcNJJJ9GxY0f22msvGjZsyHPPPcfVV1/NvvvuS79+/erk+iRJkiRJkrR5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1YYaKcchSZKkzd/ixYvp168f559/Pk2bNuX//u//GDNmDO+99x433ngjAHfeeScRwSGHHMJ9991X4XFuvvlmli1bVqZt9OjRPP/88+y9994Fvw5JkiRJtcsQWpIkSVVy1llnlXner18/li1bxk033cQNN9xARPD000+z1VZb8fLLL1caQu+xxx5lnn/xxRfMnj2bY489lnr1/OepJEmStLnxX/mSJBXAE985oK6noA10wJNP1PUUNinNmjUrU45jq63Wv9rbI488wscff8zxxx9fk1OTJEmStJEwhJYkSdJ6WbVqFStWrOC5555j3Lhx/OAHPyAiNvh448ePp1WrVvTp06cGZylJkiRpY+GNCSVJkrReGjVqRKNGjejTpw8HHHAA11xzzQYfa/ny5TzwwAMce+yx1QqytXG5//77OfLII2nVqhWNGzfmW9/61hrlWVasWMHIkSPZaaedaNiwIX369GH27NlrHOuxxx5jv/32o0mTJnz9619n8ODBvP7667V1KZIkSaoBhtCSJElaL08//TRPPfUU1157LVOmTOHss8/e4GM98MADfPLJJ5bi2Mxcd911NG7cmOuvv56pU6fSr18/hg4dyg033FAy5pxzzuH2229nzJgxTJ48mcaNG3PQQQfx97//vWTMnDlzOOyww2jVqhX3338/N998M2+99Rbf/e5317i5pSRJkjZehtCSJElaLz169GD//fdn5MiRjBs3jltuuYU333xzg441fvx4dt99d3r27FnDs1RdeuCBB7j33ns55phj6N+/P7/4xS84/vjjue666wB45513uP3227n++usZPnw4AwYM4A9/+AONGjUqs7L+/vvvZ8cdd+Tee+/l4IMP5nvf+x533XUXCxcuZNasWXV1eaphNbVy/oknnqBfv360bNmSBg0a0K5dO0aNGuUXFpIkbQQMoSVJkrTBevToAcDbb7+93vsuXbqUhx9+2FXQm6HmzZuv0da9e3c++OADAF566SVWrVrFQQcdVNLfoEED+vTpw0MPPVTStnLlSho2bEi9el/dyqZp06YApJQKNX3VsppaOb9kyRK6d+/OTTfdxKOPPsqoUaP47W9/y9ChQ+visiRJUinemFCSJEkbrHg1atu2bdd739///vesWLHCEHoL8fTTT7PHHnsA8PnnnwNQv379MmMaNGjA3//+d5YvX07Dhg058cQTuemmmxg7dizDhg3jk08+YeTIkXTu3JkDDzyw1q9BhfHAAw+U+eKif//+LFq0iOuuu44RI0aUrJz/9a9/zemnn14ypl27dlxzzTXceOONAAwePJjBgweXHKdv377Ur1+fYcOGsWTJEnbcccfavTBJklTCEFqSJElVcuihh3LQQQfRtWtXtt56a2bNmsW1117LscceS/v27QGYPXs2CxYsYOHChUD25/EfffQRbdq0WaPkxvjx4+nWrRtdunSp9WtR7Zo+fTpTpkzhjjvuAGD33XcH4K9//StHHHEEkK1s/utf/0pKiX/96180bNiQ7t278+CDDzJkyBAuuugiADp37syjjz5KgwYN6uZiVOMqWzk/ZcoUYN0r54tD6Io0a9YMgC+++KKGZy1JktaH5TgkSZJUJXvvvTdFRUUMGTKEY445hgceeIArr7ySu+66q2TMjTfeyJAhQxg5ciQAY8aMYciQIWuERB999BHTp0/nuOOOq9VrUO1bsGABQ4cOZdCgQZx66qkA7Lnnnuy333785Cc/Yc6cOXz44YdccsklzJs3D4Ctt94agFdeeYWhQ4dy9NFH86c//YkpU6awww47MHDgQOv8bubWd+V8aatWrWLFihW88MILXHHFFRx99NHstNNOtTNxFdS66ocvWLCAiKhw69SpU5ljPfbYY+y33340adKEr3/96wwePJjXX3+9ti9JkrYYroSWJElSlfzsZz/jZz/72VrHFBUVUVRUtM5jNW/enJUrV9bQzLSxWrJkCQMGDGC33Xbj7rvvLtNX/IVG8Qr5rl27cu6553LDDTeUlE249NJL6dChA7fffnvJfn369GHXXXfltttuK/myQ5uXDV05X6xr164lYeIhhxxS5osybdquu+462rZty/XXX0/z5s2ZNm0aQ4cO5aOPPmLEiBHsvPPOPPPMM2X2+eyzzzj44IMZMGBASducOXM47LDDOOqoo7jsssv497//zeWXX853v/tdXn75ZbbffvvavjRJ2uwZQkuSJEmqccuXL+fwww/niy++4KGHHqJRo0Zl+nfffXeef/553nrrLVauXEnHjh0ZMWIEPXr0YJtttgFg7ty59OvXr8x+O+ywA61bt+bNN9+stWtR7VnXyvlddtmF3Xbbjeuuu26NlfPFJk+ezNKlS3nppZe4/PLLGTJkCA8++CARUduXoxq2rvrhDRo04Nvf/naZfSZOnMiXX35Z5v4D999/PzvuuCP33ntvyY1PO3ToQLdu3Zg1a1aZwFqSVDMsxyFJkiSpRn355ZcMGTKE+fPn8/DDD9OyZctKx7Zr145OnTqxePFiJk6cyBlnnFHS17p1a55//vky4xcvXsyCBQto06ZNoaavOrKulfMNGzakZ8+etGzZkgceeIBzzz2XbbbZZo0bDnbt2pXevXtz1llncd999zFt2jRmzJhRm5eiAqmsfvgHH3xQ6T7jx4+nbdu27LPPPiVtK1eupGHDhiUBNEDTpk2BbJW9JKnmGUJLkiRJqlE//OEPmTZtGpdeeilLlizhL3/5S8m2YsUKAMaNG8c999zDzJkz+d///V969erFnnvuWSaEHj58OM888wynnnoqjz76KL/73e8YOHAg9evX54QTTqiry1MBVHXl/JtvvsncuXN56aWXWLFiRZmV8xXp0aMHAG+99VZB56+6U7p+eHnLli3j4YcfLrMKGuDEE09k0aJFjB07lo8//piFCxcycuRIOnfuzIEHHlgb05akLY7lOCRJkiTVqD/+8Y8AnHvuuWv0vf3227Rp04bPPvuMn/70pyxatIiWLVsydOhQLrvsMrba6qt1MoMGDWLChAlcc801DBkyhG233ZaePXsyc+ZMdtlll1q7HhVW6ZXzs2bNWufKechubjpx4kR+/vOfr/XYs2bNAqBt27Y1N2FtNMrXDy/vD3/4A59//vkaN8Ht3r07Dz74IEOGDOGiiy4CoHPnzjz66KM0aNCg4POWpC2RIbQkSZKkGrVgwYJ1jrnwwgu58MIL1znumGOO4ZhjjqmBWWljVbxy/pe//GXJyvli3bt3p0GDBowbN45mzZrRqlUr5s+fz5VXXrnGyvmTTjqJjh07stdee9GwYUOee+45rr76avbdd981aotr01dR/fDy7rvvPrp27cqee+5Zpv2VV15h6NChHH300QwdOpRPP/2Uq666ioEDB/L00097Y0JJKgBDaEmSpDp046gH6noKqoazrz2irqcgbfJqauV8r169KCoq4he/+AWrVq2ibdu2nHPOOZx33nllxmnTt7b64cUWL17Mn/70J8aMGbNG36WXXkqHDh24/fbbS9r69OnDrrvuym233cbIkSMLNXVJ2mIZQkuSJEmS6kxNrZwfMWIEI0aMqKFZaWO1rvrhxSZNmsSXX365RikOgLlz566xOn6HHXagdevWvPnmmwWZtyRt6QyhJUmSJEnSRm996offd9999OrVi/bt26/R17p1a55//vkybYsXL2bBggW0adOmpqctScIQWpIkSZIkbQKqUj8cYNGiRTz11FNce+21FR5n+PDhHHXUUZx66qkcf/zxfPrpp4wdO5b69etzwv9v787D5ajKxI9/3wRQEAiBREYQDDqKIiIIgigMARkUQaIDAQQHcWMQEaLgAuoM+mNxG0BERFSICiIQUECQVcK+I5CERRwWlUVANjGyJLy/P87ppHPT3bdvcvtm+36e5z63+3TVqVPdp6pOvXXq1O67D8m6SNKSxoGxJEmSJEnSQq95/PBNN910jr+HH3541nSnn346QNuHmo4bN47TTjuNadOmMX78ePbee29WWWUVJk+ezGqrrdb7FdGQOOOMM9hhhx1YffXVWX755dlwww059dRT205/9NFHExHstNNOc6Rfcskl7LLLLrzmNa9hueWWY9111+XYY49l5syZvV4FDZHBqiuPPfYY++23HxtvvDHLLLOMd1b0YU9oSZIkSZK00Otm/HCACRMmMGHChI7T7Lzzzm2D1Fo8HHnkkay11locddRRjBo1ivPPP5/ddtuNxx9/fK7x4x999FG+/vWvM3r06LnyOeGEE5g+fTqHHnooa6yxBldddRUHHHAA9913X9ve9lq0DFZdefDBBznttNPYZJNNWH/99Xn00UeHahUWCQahJUmSpEXEYR/eqf+JtFD68smTFnQRJGmJcu655zJq1KhZ77faaiseeughjjzyyLkCiwcddBDbbbcdf/7zn+fK57jjjpsjn7FjxzJ9+nSOOuooDj/88FnDwGjRNVh1Zb311uOvf/0rAAceeCCTJnnsb2YQWpIkSZIWM3ce9rsFXQTNhzd9easFXQRpkdccVGzYYIMNOPvss+dIu/HGGzn99NO56667Wo4J3i6f5557jmeeeaZlj1gtWgarrgwb5qjHnfjtSJIkSZIkabF3zTXXsM4668x6n5nsu+++fOELX2D11VcfUD6jRo0yAL0YG6y6otnsCS1JkiRJkqTF2qWXXsrZZ5/NiSeeOCvtpJNO4pFHHuHAAw/sOp877riD448/ni9+8Yu9KKYWAoNVVzQng9CSJEmSJElabN1///3stttujBs3jj333BOAp59+moMPPphj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\n",
      "text/plain": [
       "<Figure size 1800x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_of_popular_categery=data.loc[data['smallest_subcategory']!='nan']['smallest_subcategory'].value_counts().head(10)\n",
    "x=np.arange(10)+1\n",
    "label=data_of_popular_categery._stat_axis.values.tolist()\n",
    "print(label)\n",
    "y=data_of_popular_categery.values.tolist()\n",
    "plt.figure(figsize=(25,6))\n",
    "plt.xlabel('category of toy')\n",
    "plt.title('The top 10 popular toy category',fontsize=20)\n",
    "plt.margins(0.2)\n",
    "plt.subplots_adjust(bottom=0.15)\n",
    "sns.barplot(x,y)\n",
    "sns.barplot(x,y).set(xticklabels=label)\n",
    "for a,b in zip(x,y):\n",
    "    plt.text(a-1, b+15, b, ha='center', va= 'bottom',fontsize=15)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.在市场上占据主导地位的品牌方有哪些"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['LEGO', 'Disney', 'Oxford Diecast', 'Playmobil', 'Star Wars', 'Mattel', 'Hasbro', 'The Puppet Company', 'MyTinyWorld', 'Corgi']\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1800x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_of_popular_manufacturer=data['manufacturer'].value_counts().head(10)\n",
    "x=np.arange(10)+1\n",
    "label=data_of_popular_manufacturer._stat_axis.values.tolist()\n",
    "print(label)\n",
    "y=data_of_popular_manufacturer.values.tolist()\n",
    "plt.figure(figsize=(25,6))\n",
    "plt.xlabel('category of toy')\n",
    "plt.title('The top 10 popular toy brands',fontsize=20)\n",
    "plt.margins(0.2)\n",
    "plt.subplots_adjust(bottom=0.15)\n",
    "sns.barplot(x,y)\n",
    "sns.barplot(x,y).set(xticklabels=label)\n",
    "for a,b in zip(x,y):\n",
    "    plt.text(a-1, b+15, b, ha='center', va= 'bottom',fontsize=15)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.根据apriori算法挖掘潜在的物品购买关联"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们字段中有\"items_customers_buy_after_viewing_this_item\"和\"items_customers_buy_after_viewing_this_item\"，这样我们就可以得到顾客在同一时间购买的商品组合，将这些商品组合放在一个列表里用efficient-apriori挖掘频繁项集合关联规则。整体流程是先对\"items_customers_buy_after_viewing_this_item\"字段进行清洗得到包含商品名称的列表，然后再往这个列表里加入顾客购买的\"product_name\"，这样就能得到一个完整的商品集，然后利用算法进行挖掘。具体过程如下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{1: {('15pcs-Miniature-Porcelain-Plate-Colorful-Floral',): 22, ('Alison-Gardiner-Traditional',): 21, ('Amazon-EU-S-%C3%A0-r-l-Amazon-co-uk-Printable',): 32, ('Amscan-International',): 139, ('Battery-Tester-Voltage-Buzzer-Alarm',): 19, ('Birthday-Tropical-Assorted-Qualatex-Balloons',): 45, ('Crafted-Cherry-Wooden-Chess-Draughts',): 21, ('Despicable',): 30, ('Dungeon-Masters-Dungeons-Dragons-Accessories',): 25, ('Dungeon-Masters-Dungeons-Dragons-Rulebooks',): 36, ('Dungeons-Dragons-Players-Handbook-Rulebooks',): 49, ('Fiesta-Crafts-White-Moving-Puppet',): 20, ('Gamewright',): 21, ('Girls-10ml-Glitter-Tattoo-Glue',): 27, ('Glitz-Black-Birthday-Bunting-Banner',): 19, ('Glitz-Blue-Latex-Birthday-Balloons',): 26, ('Glitz-Pink-Latex-Birthday-Balloons',): 25, ('Hanging-Glitz-Prism-Birthday-Decorations',): 30, ('Happy-Birthday-Banner-Banners-Decoration',): 20, ('Hornby-R1167-Flying-Scotsman-Electric',): 23, ('Inflatable',): 30, ('Johnsons-Baby-Extra-Sensitive-Wipes',): 19, ('Johnsons-Extra-Sensitive-Baby-wipes',): 34, ('Kotobukiya',): 22, ('Loom-Bandz-Rainbow-Colours-White',): 19, ('Magic-Gathering-Origins-Deck-Builders',): 29, ('Metal-Spacer-Beads-Silver-Plated',): 20, ('Monster-Manual-Dungeons-Rulebook-Rulebooks',): 31, ('MyTinyWorld',): 51, ('Pampers-Active-Size-Junior-Monthly',): 19, ('Pampers-Baby-Junior-Nappies-Monthly',): 29, ('Pampers-Baby-Nappies-Size-Total',): 18, ('Perfectly-Pink-Party-Birthday-Bunting',): 28, ('Personalised',): 29, ('Playmobil-4783-Collectable',): 19, ('Playmobil-5135-Large-Pirate-Ship',): 20, ('Playmobil-5136-Pirate-Gang',): 22, ('Polyhedral',): 20, ('Q-Workshop-Polyhedral',): 22, ('Ravensburger',): 167, ('Revell-39604-Contacta-Professional',): 42, ('Scalextric',): 87, ('Silver-Hearts-Holographic',): 24, ('SmartDealsPro',): 28, ('The-Creativity',): 20, ('The-Puppet-Company-Finger-Puppets',): 18, ('The-Puppet-Company-Long-Sleeves',): 20, ('The-Puppet-Company-Sleeves-Border',): 19, ('The-Puppet-Company-Sleeves-Giraffe',): 19, ('Thomas-Friends-Trackmaster',): 25, ('Thomas-Friends-Wooden-Railway-Engine',): 18, ('Tommee-Tippee-Sangenic-Compatible',): 38, ('Tournament',): 20, ('Trading-Card-Sleeves-Protectors',): 50, ('Traditional',): 23, ('Transformers',): 77, ('Uninflated',): 18, ('Waddingtons',): 29, ('WaterWipes',): 20, ('Yu-Gi-Oh-Games-Yugis-Legendary-Holiday',): 23, ('Yu-Gi-Oh-Legendary-Collection',): 34, ('Yu-Gi-Oh-Premium-Gold-Booster-Pack',): 32, ('k2-accessories',): 32}, 2: {('Dungeon-Masters-Dungeons-Dragons-Accessories', 'Dungeon-Masters-Dungeons-Dragons-Rulebooks'): 18, ('Dungeon-Masters-Dungeons-Dragons-Accessories', 'Dungeons-Dragons-Players-Handbook-Rulebooks'): 21, ('Dungeon-Masters-Dungeons-Dragons-Rulebooks', 'Dungeons-Dragons-Players-Handbook-Rulebooks'): 33, ('Dungeon-Masters-Dungeons-Dragons-Rulebooks', 'Monster-Manual-Dungeons-Rulebook-Rulebooks'): 25, ('Dungeons-Dragons-Players-Handbook-Rulebooks', 'Monster-Manual-Dungeons-Rulebook-Rulebooks'): 28}, 3: {('Dungeon-Masters-Dungeons-Dragons-Accessories', 'Dungeon-Masters-Dungeons-Dragons-Rulebooks', 'Dungeons-Dragons-Players-Handbook-Rulebooks'): 18, ('Dungeon-Masters-Dungeons-Dragons-Rulebooks', 'Dungeons-Dragons-Players-Handbook-Rulebooks', 'Monster-Manual-Dungeons-Rulebook-Rulebooks'): 24}}\n",
      "\n",
      "[{Dungeon-Masters-Dungeons-Dragons-Rulebooks} -> {Dungeons-Dragons-Players-Handbook-Rulebooks}, {Monster-Manual-Dungeons-Rulebook-Rulebooks} -> {Dungeons-Dragons-Players-Handbook-Rulebooks}, {Dungeon-Masters-Dungeons-Dragons-Accessories, Dungeon-Masters-Dungeons-Dragons-Rulebooks} -> {Dungeons-Dragons-Players-Handbook-Rulebooks}, {Dungeon-Masters-Dungeons-Dragons-Rulebooks, Monster-Manual-Dungeons-Rulebook-Rulebooks} -> {Dungeons-Dragons-Players-Handbook-Rulebooks}]\n"
     ]
    }
   ],
   "source": [
    "def get_tem_list(unsplit_list):\n",
    "    '''\n",
    "    将字段先按“|”进行分割，然后再按“/”进行分割，最终得到\n",
    "    包含商品名称的列表，将之进行返回。\n",
    "    '''\n",
    "    unsplit_list=unsplit_list.split('|')\n",
    "    tem_list=[]\n",
    "    for i in range(len(unsplit_list)):\n",
    "        tem_list.append(unsplit_list[i].split('/')[3].strip())\n",
    "    return tem_list\n",
    "    \n",
    "def get_itemsets_rules(field,min_support,min_confidence):\n",
    "    product_name_list=data.loc[data[field].notnull()]['product_name'].values.tolist()\n",
    "    also_bought_list=data.loc[data[field].notnull()][field].values.tolist()    \n",
    "    total_product_list=[]\n",
    "    for i in range(0,len(also_bought_list)):\n",
    "        tem_list=get_tem_list(also_bought_list[i])\n",
    "        tem_list +=tem_list+[product_name_list[i].strip()]\n",
    "        total_product_list.append(tuple(tem_list))\n",
    "    itemsets,rules=apriori(total_product_list,min_support=min_support,min_confidence=min_confidence)\n",
    "    return itemsets,rules\n",
    "\n",
    "itemsets,rules=get_itemsets_rules('customers_who_bought_this_item_also_bought',min_support=0.002,min_confidence=0.9)\n",
    "print(itemsets)\n",
    "print()\n",
    "print(rules)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于数据量大，我们将支持度设置为0.002也就是说在这1万条数据里只要出现过20次及以上的我们就把它当做频繁项集，然后我们将置信度调整到0.9，意味着两个物品同时出现的概率必须在90%以上我们才愿意相信两者之间的确存在某种隐秘关系，最终我们发现了上面的几个关联规则。接下来我们继续探索购物者浏览过的商品与其之后购买商品是否有关联规则。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{1: {('12pcs-1-2-inch-Scenery-Landscape',): 14, ('15pcs-Miniature-Porcelain-Plate-Colorful-Floral',): 19, ('Amscan-International',): 81, ('Asmodee-ASMDOBB01EN',): 43, ('Ateam-600pcs-Glitter-Style-S-Clips',): 16, ('BRIO-Rail-Magnetic-Bell-Signal',): 24, ('Bestway-Ocean-Life-122cm',): 18, ('Bicycle-Standard-Index-Playing-Cards',): 15, ('Birthday-Tropical-Assorted-Qualatex-Balloons',): 22, ('Cards-Against-Humanity-UK-edition',): 35, ('Chuggington',): 15, ('Crafted-Cherry-Wooden-Chess-Draughts',): 23, ('Creativity',): 14, ('Dice-spot-pack-10-16mm-diameter-00563',): 14, ('Dungeon-Masters-Dungeons-Dragons-Rulebooks',): 15, ('Dungeons-Dragons-Players-Handbook-Rulebooks',): 53, ('Exploding-Kittens-About-Explosions',): 18, ('Fiesta-Crafts-White-Moving-Puppet',): 18, ('Fiesta-T-2343-Monkey-Puppet',): 32, ('G%C3%BCnther-1159-Childrens-Rainbow-Colours',): 24, ('Girls-10ml-Glitter-Tattoo-Glue',): 24, ('Glitz-Blue-Latex-Birthday-Balloons',): 15, ('Glitz-Pink-Latex-Birthday-Balloons',): 22, ('Hama-Beads-10-000-Bucket',): 29, ('Hanging-Glitz-Prism-Birthday-Decorations',): 17, ('Henbrandt-Sterling-Play-Money',): 14, ('Hornby-R8222-Gauge-Track-Extension',): 30, ('Hornby-R8223-Gauge-Track-Extension',): 17, ('Inflatable',): 27, ('Kotobukiya',): 14, ('LEGO-Superheroes',): 16, ('Lego-Minifigure',): 14, ('Loom-Bandz-Rainbow-Colours-Black',): 15, ('Loom-Bandz-Rainbow-Colours-White',): 15, ('MATCHED-COLOUR-Dice-bulk-dice',): 16, ('MIDNIGHT-VENETIAN-MASQUERADE',): 15, ('Magic-Gathering-2015-Deck-Builders',): 17, ('Magic-Gathering-Origins-Deck-Builders',): 28, ('Monster-Manual-Dungeons-Rulebook-Rulebooks',): 19, ('MyTinyWorld',): 29, ('Orchard-Toys-003-Shopping-List',): 15, ('Party-Bubbles-for-Favour',): 16, ('Perfectly-Pink-Party-Birthday-Bunting',): 18, ('Personalised',): 14, ('Playmobil-5135-Large-Pirate-Ship',): 14, ('Playmobil-5136-Pirate-Gang',): 15, ('Playmobil-5298-Pirates-Skull-Corsair',): 15, ('Playmobil-5493-Christmas-Calendar-Treasure',): 15, ('Playmobil-5494-Christmas-Calendar-Workshop',): 17, ('Polyhedral',): 14, ('Q-Workshop-Polyhedral',): 18, ('Q-Workshop-QWOELV01-Q-workshop-Elven-Bag',): 17, ('Ravensburger',): 132, ('Revell-39604-Contacta-Professional',): 60, ('Scalextric',): 55, ('Schleich-Dragon-Knight-Action-Figure',): 16, ('Silver-Hearts-Holographic',): 28, ('Spirit-of-Air-Super-Rainbow',): 14, ('The-Creativity',): 20, ('The-Puppet-Company-Monsters-Orange',): 14, ('The-Puppet-Company-Sleeves-Border',): 17, ('Thomas-Friends-Take-n-Play-Straight-Curved',): 18, ('Thomas-Friends-Trackmaster',): 22, ('Thomas-Friends-Wooden-Railway-Engine',): 21, ('Trading-Card-Sleeves-Protectors',): 24, ('Transformers',): 54, ('Trival-Pursuit-21289-Trivial-Potter',): 20, ('Wolf-Little-Pigs-Tellatale-Puppet',): 14, ('Woodeyland',): 16, ('Yu-Gi-Oh-Battle-Pack-Giants-Booster',): 14, ('Yu-Gi-Oh-Games-Yugis-Legendary-Holiday',): 25, ('Yu-Gi-Oh-Legendary-Collection',): 23, ('Yu-Gi-Oh-Space-Time-Showdown-Starter-Deck',): 15, ('Yu-Gi-Oh-Super-Starter-Victory-Card',): 16}, 2: {('Dungeon-Masters-Dungeons-Dragons-Rulebooks', 'Dungeons-Dragons-Players-Handbook-Rulebooks'): 15, ('Dungeons-Dragons-Players-Handbook-Rulebooks', 'Monster-Manual-Dungeons-Rulebook-Rulebooks'): 16}}\n",
      "\n",
      "[{Dungeon-Masters-Dungeons-Dragons-Rulebooks} -> {Dungeons-Dragons-Players-Handbook-Rulebooks}, {Monster-Manual-Dungeons-Rulebook-Rulebooks} -> {Dungeons-Dragons-Players-Handbook-Rulebooks}]\n"
     ]
    }
   ],
   "source": [
    "itemsets,rules=get_itemsets_rules('items_customers_buy_after_viewing_this_item',min_support=0.002,min_confidence=0.8)\n",
    "print(itemsets)\n",
    "print()\n",
    "print(rules)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们发现关联规则没有变化，所以最终我们发现了4条关联规则，虽然有些少，但其中也有数据量不够大同时产品名称过于精细所致。毕竟零售行业做关联能发现尿布和啤酒之间有相关性，但是他不会精确到a品牌尿布与b品牌啤酒有相关性，而是会在尿布旁边摆放不同品牌啤酒。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4.消费者评论情绪分析\n",
    "消费者对一件商品的评分和其评论中所包含的情绪是相关的，如果对本次购物非常满意，那么不仅评分会高在评论里面也会显示出积极正面的情绪。接下来我们将评分所体现的情绪进行分类，然后再对评论进行切词，最后利用朴素贝叶斯分类器进行机器学习。\n",
    "首先我们要来看一下商品评分分布情况："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5.0    5138\n",
      "4.0    1311\n",
      "4.5     718\n",
      "4.8     567\n",
      "4.7     528\n",
      "4.3     407\n",
      "4.6     392\n",
      "4.4     298\n",
      "4.9     237\n",
      "4.2     217\n",
      "4.1     145\n",
      "3.9       7\n",
      "3.6       3\n",
      "3.0       3\n",
      "3.3       2\n",
      "3.5       2\n",
      "3.7       2\n",
      "2.3       1\n",
      "3.8       1\n",
      "Name: average_review_rating, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "data_of_rating_and_reviews=data.loc[(data['customer_reviews'].notnull())&(data['average_review_rating'].notnull())][['average_review_rating','customer_reviews']]\n",
    "print(data_of_rating_and_reviews['average_review_rating'].value_counts())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们发现评分在4分以下的数据极少不具备分析价值对此进行舍弃，然后我们决定按照评分将顾客对商品的满意度分为两类，4-4.9分为“excellent”，5分为“perfect”,试图用机器学习找到顾客在碰到完美产品和满意的产品时，评论发生的些许改变。首先我们队数据进行如下转换："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "perfect      5138\n",
      "excellent    4820\n",
      "Name: average_review_rating, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "from nltk.corpus import stopwords \n",
    "from nltk.tokenize import word_tokenize\n",
    "from sklearn.feature_extraction.text import TfidfVectorizer\n",
    "from sklearn.naive_bayes import MultinomialNB\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn import metrics\n",
    "data_of_rating_and_reviews=data_of_rating_and_reviews.loc[(data_of_rating_and_reviews['average_review_rating']>=4)]\n",
    "data_of_rating_and_reviews['average_review_rating']=data_of_rating_and_reviews['average_review_rating'].astype(str)\n",
    "data_of_rating_and_reviews.loc[(data_of_rating_and_reviews['average_review_rating'].isin(['4.0','4.1','4.2','4.3','4.4','4.5','4.6','4.7','4.8','4.9'])), 'average_review_rating']='excellent'\n",
    "data_of_rating_and_reviews.loc[(data_of_rating_and_reviews['average_review_rating']=='5.0'),'average_review_rating']='perfect'\n",
    "print(data_of_rating_and_reviews['average_review_rating'].value_counts())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们能看到相应数据已转换成功，下面我们对数据进行切词处理，并将其分为训练集和测试集，训练贝叶斯分类器，获取模型计算准确率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "准确率为： 0.6857429718875502\n"
     ]
    }
   ],
   "source": [
    "def get_cut_words_list(uncut_word_list):\n",
    "    word_list=[]\n",
    "    for i in range(len(uncut_word_list)):  \n",
    "        text_with_spaces=''\n",
    "        text_cut=word_tokenize(uncut_word_list[i])\n",
    "        for i in range(len(text_cut)):\n",
    "            text_with_spaces=text_with_spaces+text_cut[i]+' '\n",
    "        word_list.append(text_with_spaces)\n",
    "    return word_list\n",
    "\n",
    "labels=data_of_rating_and_reviews['average_review_rating'].values.tolist()\n",
    "features=get_cut_words_list(data_of_rating_and_reviews['customer_reviews'].values.tolist())\n",
    "train_features,test_features,train_lables,test_lables=train_test_split(features,labels,test_size=0.2)\n",
    "stop_words=stopwords.words('english')\n",
    "tf = TfidfVectorizer(stop_words=stop_words, max_df=0.5)\n",
    "train_features = tf.fit_transform(train_features)\n",
    "test_features = tf.transform(test_features)  # 上面fit过了，这里transform\n",
    "clf = MultinomialNB(alpha=0.001).fit(train_features, train_lables) # 多项式贝叶斯分类器 \n",
    "predicted_lables=clf.predict(test_features)\n",
    "print('准确率为：', metrics.accuracy_score(test_lables, predicted_lables))  # 计算准确率"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最终得到的预测准确率为0.68左右，准确率不够高，原因在于文本中情感区分度不够高，机器难以细腻地识别非常好与很好之间的些许区别。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 结论\n",
    "1. 我们最终发现了玩具市场上最受欢迎的十大品类:'Vehicles', 'Toys', 'Science Fiction & Fantasy', 'Bead Art & Jewellery-Making', 'Packs & Sets', 'Dice & Dice Games', 'Balloons', 'Banners', 'Card Games', 'Hand Puppets'。        \n",
    "2. 找到了占据市场主导地位的厂商:'LEGO', 'Disney', 'Oxford Diecast', 'Playmobil', 'Star Wars', 'Mattel', 'Hasbro', 'The Puppet Company', 'MyTinyWorld', 'Corgi'。            \n",
    "3. 计算出商品关联规则:{Dungeon-Masters-Dungeons-Dragons-Rulebooks} -> {Dungeons-Dragons-Players-Handbook-Rulebooks}, {Monster-Manual-Dungeons-Rulebook-Rulebooks} -> {Dungeons-Dragons-Players-Handbook-Rulebooks}……             \n",
    "4. 搭建了一个对用户评论中所包含情绪的预测模型,该模型常用于舆情监控。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
